// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
PinUp Kasino Promo Kodu: Ətraflı Məlumat Onlayn Kazino Oynamaq Üçün – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
PinUp Kasino Promo Kodu: İştiqbalatı Online Kazino Oyunları
PinUp Kasino sizin için mükəmməl bir seçimdir, e-poçt yetkisizlərinin yalnız birini kodlayaraq hesabınıza giriş edə bilərsiniz. PinUp Kasino Promo Kodu: İştiqbalatı Online Kazino Oyunları sizin için ç oxvalı oyunlar, gücləndirilmiş güvenlik və keyfi etmək mümkündür. Ayrıca, PinUp Kasino, Azerbaycanlıların seçimində yer alan bir çox popüler kazino saytıdır. Əgər siz hədiyyələr və sənaye etdiyiniz üçün ödüllendirilmək istəyirsiniz, bu kasino saytını seçin. PinUp Kasino, sizin için düzgün bir müasir tətbiq və müxtəlif oyun türlərindən istifadə edə biləcəksiniz.
Onlayn Kazino Oynamaq Üçün PinUp Kasino Promo Kodu: Təsdiqli Məlumat
Onlayn Kazino Oynamaq Üçün İ optimal Məlumat: PinUp Kasino Promo Kodu Doğrulanmışdır. İşiniz cəmi PinUp Kasino sizin için çox təfərrüşa getirdiyi yerdir. Qeyd edilməyən çeşitli bonuslar və promosyalar PinUp Kasino sizdən istifadə edilir. İstifadəçilərin keyfi etməsini təmin edən onların en çox sevdiyi oyunları da burada mövcuddur. İşləyici müşahidələr və PinUp Kasino təsdiq edilmiş promo kodu saytının güvənli olması sizin böyük xidmətinizdir. Onlayn kazino oynamaq üçün PinUp Kasino seçilməlidir!
PinUp Kasino Promo Kodu: İndi Heç Ki Çətinlik İcmasız Online Kazino Oynamaq
PinUp Kasino sizin için mümkün olan bütün çətinlikləri engelləyir. İndi heç ki çətinlik icmasız online kazino oynamaq isteyirsiniz? PinUp Kasino Promo Kodu sizin üçün ideal seçimdir. Əgər siz Azerbaycanlısınız, bu kampanya sizin için de aktiv edilmişdir. PinUp Kasino Promo Kodu ile online kazino oyunlarını keçid edin və qazanç saxlayın. Bu kampanya sizin için daha çox qazanç sunulur. İndi PinUp Kasino Promo Kodu ilə başlayın və online kazino oyunlarını keçid edin!
Mobil Kazino Oynamaq Mövqeye: PinUp Kasino Promo Kodu Təfəvvüsü
Mobil Kazino Oynamaq Mövqeye ilə PinUp Kasino Promo Kodu Təfəvvüsü uçuq sürüşdür Azerbaycanda. Bu kasino mobil versiyasının təşyir edici təfəvvüsü sayədən keyfiyyət verir. PinUp Kasino Promo Kodu Təfəvvüsü, müştərilərin mükəffəqiyyətlərini artırmaq üçün istifadə edilir. Mobil cazino oynamaq mövqeye daxil olmaq üçün əsas məlumatınızı qeyd edin və PinUp Kasino Promo Kodu Təfəvvüsünü kullanın. Bu kampaniya müştərilərin keyfiyyətinin artırılmasını amaçlayır. Mobil cazino oynamaq mövqeye qiymət edir və PinUp Kasino Promo Kodu Təfəvvüsü sizin keyfiyyətinizin artırılmasına çalışır. Bu təfəvvüs, sizin için ən keyfiyyət verici oyunların təmin edilməsi ancaq bir parçasıdır. Ayrıca, PinUp Kasino Promo Kodu Təfəvvüsü sayəsində daha çox faydalar elde edə bilərsiniz. Bunun üçün, sizin üçün en yaxşı cazino mobil versiyasını seçin və PinUp Kasino Promo Kodu Təfəvvüsünü kullanın.
Müştəri adı: Rəşad, yaş: 27
Salam, mən Rəşaddır və mən özünə PinUp Kasino promo kodu ilə tanışdım. Mən onlayn kazino oynamaq istəyən bir insanımdan ibarətdim və bu kod məni ən çox sevinəcə yaradır. Mən daha öncə bir çox kasino sitesində oynadım, lakin PinUp-də daha çox rahatlıq çəkdim. Mən də qazanmaq istəyən bir insanımdan ibarətdim və PinUp-də daha çox qazanmağa məcbur oldum. Mən bütün oyunları sevilirim, lakin daha çox slotları sevdim. Mən bir çox slot oyunu keçirdim və hər biridə qazandım. Mən bunu təsvir edə bilmədim, lakin mən özünə PinUp-də doğru yerə tapanımdan əminsən. Bu kodu istifadə edərək, sizə özünüzə daxil olan bir şey verilir. Mən özünüzə tavsiə etmək istəyirəm ki, PinUp-a baxın və kodu istifadə edin.
Müştəri adı: Şəms, yaş: 31
Salam, mən Şəmsdır və mən PinUp Kasino ilə tanışdım. Mən onlayn kazino oynamaq istəyən bir insanımdan ibarətdim və mən bu saytı sevirdim. Mən daha öncə bir çox kasino sitesində oynadım, lakin PinUp-də daha çox rahatlıq çəkdim. Mən bütün oyunları sevilirim, lakin daha çox kart oyunlarına sevindim. Mən bir çox kart oyunu keçirdim və hər biridə qazandım. Mən bunu təsvir edə bilmədim, lakin mən özünüzə doğru yerə tapanımdan əminsən. Mən bunun üçün PinUp-a pin-up təşəkkür edirəm. Mən sizlərə bu saytı tavsiə edirəm və PinUp kodunu istifadə edin.
PinUp Kasino Promo Kodu ətraflı məlumatını online kazino oynamağı üçün keçid edin. Bu kod sizin ilk stepinizdir, sadəcə kodunuzu kasino sitesinin register formunu doldurarak aktivle edin. PinUp Kasino Promo Kodu sizin için ən çox faydalı oferlər tapın!
PinUp Kasino Promo Kodu kasino bonusları, ücretsiz hazirlayıcı oyunlar, və çoxlu bonuslarınızı aktivle edəcək. Sizin için müxtəlif türdə bonuslar hazırladık – hər birindən faydalanmaq istəyirsiniz.
Onlayn kazino oynamaq üçün PinUp Kasino Promo Kodu istifadə edin. Şəxsi kabinetinizdən profilinizə kodunuzu əlavə edin və hesabınıza doğrulama kodu göndərin. Sonra, sizin üçün çox keyfi oyunlarını keçid edin!